# -*- coding: utf-8 -*-
# @Time    : 2024/7/15 15:14
# @Author  : yujiahao
# @File    : 26_fastapi_dependency_class.py
# @description:类作为依赖项


from fastapi import Depends, FastAPI

app = FastAPI()

# 之前案是返回了一个dict()，但是这个在操作的时候编辑器不知道类型，由此，我们可以做的更好一些，只要是可调用对象都可以。
# Python 中的 "可调用对象" 是指任何 Python 可以像函数一样 "调用" 的对象。
fake_items_db = [{"item_name": "Foo"}, {"item_name": "Bar"}, {"item_name": "Baz"}]


# 这里声明一个类，将这个类当做依赖参数给传递进去
class CommonQueryParams:
    def __init__(self, q: str | None = None, skip: int = 0, limit: int = 100):
        self.q = q
        self.skip = skip
        self.limit = limit


#
@app.get("/items/")
# async def read_items(commons: CommonQueryParams = Depends(CommonQueryParams)):
# 这里也可以这么写参数(类型注解) commons: CommonQueryParams = Depends()，这只是一个快捷方式。因为 FastAPI 关心的是帮助您减少代码重复。
async def read_items(commons: CommonQueryParams = Depends()):
    response = {}
    if commons.q:
        response.update({"q": commons.q})
    items = fake_items_db[commons.skip: commons.skip + commons.limit]
    response.update({"items": items})
    return response
